package kgc.crm.controller;
import cn.hutool.core.lang.generator.UUIDGenerator;
import com.alibaba.fastjson.JSONObject;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import kgc.crm.util.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController

public class CaptchaController {
    @Autowired
    private DefaultKaptcha defaultKaptcha;
    @Autowired
    private RedisBean redisBean;

//解决Content-Type 中文乱ma
    /*Spring Boot项目开发过程中，前后端分离的项目，前后端通过json的数据格式交互
    ，接口采用@ResponseBody注解返回json数据，
    如果接口返回的数据类型是String，会导致中文乱码。*/
    @GetMapping(value = "captcha")
    public ResponseEntity captcha() {
        //定义response输出类型为image/jpeg类型
        //-------------生成验证码 begin---------------
        String text = defaultKaptcha.createText();
        log.info("验证码内容=======>:{}",text);
        UUID uuid = UUID.randomUUID();//通过hutool生成UUID 当redis里的key 去除- 转成空格
        String key = uuid.toString().replace("-", "");
        //将验证码文本内容放入session中
        redisBean.set(key,text,5 * 60);//设置过期时间
        //根据文本验证码内容创建图形验证码
        BufferedImage image = defaultKaptcha.createImage(text);
        //调用工具类 把生成出来的图形验证码转换成Base64格式
        //接受到String字符串
        String code = Base64ToByte.BufferedImageToBase64(image);
        JSONObject object = new JSONObject();
        object.put("uuid",key);//把uuid当做key值存到JSON Object中
        object.put("code",code);
        //----------返回
        return ResultUtil.success(object);
    }
}
